package com.tgm.utils;

import java.math.BigDecimal;
import java.math.RoundingMode;

public class PositionUtil {
   private static final double EQUATOR_RADIUS = 6378137; // 赤道半径（单位：米）
    /**
     * 计算两点间的距离（单位：公里）
     * @param lat1 第一点纬度
     * @param lon1 第一点经度
     * @param lat2 第二点纬度
     * @param lon2 第二点经度
     * @return 两点间距离（m），保留2位小数
     */
    public static double calculateDistance(double lat1, double lon1, double lat2, double lon2) {
        // 将角度转换为弧度
        double radLat1 = Math.toRadians(lat1);
        double radLon1 = Math.toRadians(lon1);
        double radLat2 = Math.toRadians(lat2);
        double radLon2 = Math.toRadians(lon2);

        // 计算纬度差和经度差
        double deltaLat = radLat2 - radLat1;
        double deltaLon = radLon2 - radLon1;

        // 哈弗赛公式（Haversine formula）计算地球上两点间距离
        double a = Math.sin(deltaLat / 2) * Math.sin(deltaLat / 2)
                + Math.cos(radLat1) * Math.cos(radLat2)
                * Math.sin(deltaLon / 2) * Math.sin(deltaLon / 2);
        double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));

        // 计算距离（m）并保留2位小数
        return new BigDecimal(EQUATOR_RADIUS * c)
                .setScale(2, RoundingMode.HALF_UP)
                .doubleValue();
    }
}